#include "httplib.h"

using namespace httplib;

void Hello(const Request &req, Response &rsp)
{
    rsp.body = "Hello Http!";
    rsp.status = 200; // 可以忽略，默认httplib会加上一个200状态码
}

void Numbers(const Request &req, Response &rsp)
{
    // matches: 存放的是正则表达式匹配的规则数据
    // /numbers/123   matches[0]="/numbers/123"   matches[1]="123"
    std::string num = req.matches[1];
    // 向rsp.body添加数据，设置Content-Type类型
    rsp.set_content(num, "text/plain");
    rsp.status = 200;
}

void Multipart(const Request &req, Response &rsp)
{
    if (!req.has_file("file1"))
    {
        rsp.status = 400;
        return;
    }
    MultipartFormData file = req.get_file_value("file1");
    std::cout << file.filename << std::endl;    // 区域文件名称
    std::cout << file.content << std::endl;     // 区域文件内容
    rsp.status = 200;
}

int main()
{
    Server server;

    // 设置一个静态资源根目录---当前目录下的www目录
    server.set_mount_point("/", "./www");

    // 添加请求---处理函数映射信息
    server.Get("/hi", Hello);
    // 正则表达式：\d表示数字， +表示匹配前面字符一次或多次， ()表示单独捕捉数据
    server.Get("/numbers/(\\d+)", Numbers);
    server.Post("/multipart", Multipart);

    server.listen("0.0.0.0", 9090);


    return 0;
}